package com.cn.codebrush.leetcode.editor.cn;

//n 个孩子站成一排。给你一个整数数组 ratings 表示每个孩子的评分。 
//
// 你需要按照以下要求，给这些孩子分发糖果： 
//
// 
// 每个孩子至少分配到 1 个糖果。 
// 相邻两个孩子评分更高的孩子会获得更多的糖果。 
// 
//
// 请你给每个孩子分发糖果，计算并返回需要准备的 最少糖果数目 。 
//
// 
//
// 示例 1： 
//
// 
//输入：ratings = [1,0,2]
//输出：5
//解释：你可以分别给第一个、第二个、第三个孩子分发 2、1、2 颗糖果。
// 
//
// 示例 2： 
//
// 
//输入：ratings = [1,2,2]
//输出：4
//解释：你可以分别给第一个、第二个、第三个孩子分发 1、2、1 颗糖果。
//     第三个孩子只得到 1 颗糖果，这满足题面中的两个条件。 
//
// 
//
// 提示： 
//
// 
// n == ratings.length 
// 1 <= n <= 2 * 104 
// 0 <= ratings[i] <= 2 * 104 
// 
// Related Topics 贪心 数组 
// 👍 934 👎 0


public class Candy{

public static void main(String[] args) {

Solution solution = new Candy().new Solution();

}

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int candy(int[] ratings) {
        int n = ratings.length;
        int[] nums = new int[n];
        for(int q=0;q<n;q++){
            nums[q]=1;
        }
        int res = 0;
        for(int i=0;i<ratings.length-1;i++){
            if(ratings[i+1]>ratings[i]){
                nums[i+1] = nums[i]+1;
            }
        }
        res = nums[n-1];
        for(int j=n-2;j>=0;j--){
            if(ratings[j] > ratings[j+1] && nums[j] <= nums[j+1]){
                nums[j] = nums[j+1]+1;
            }
            //这一步拆出去会更好理解
            res += nums[j];
        }

        return res;
    }
}
//leetcode submit region end(Prohibit modification and deletion)


}